﻿using BUGCOME.Model.Common;

namespace BUGCOME.Service.Common.IServices
{
    /// <summary>
    /// 系统配置服务接口
    /// 继承自基础服务接口<see cref="IBaseService{SysConfig}"/>，提供系统配置的基础CRUD操作及扩展功能
    /// 主要负责系统配置项的查询、新增等业务逻辑处理
    /// </summary>
    public interface ISysConfigService : IBaseService<SysConfig>
    {
        /// <summary>
        /// 同步根据配置键名获取系统配置对象
        /// </summary>
        /// <param name="key">配置键名（唯一标识某一配置项的键，如"sys.name"）</param>
        /// <returns>对应的系统配置实体<see cref="SysConfig"/>，若不存在则返回null</returns>
        SysConfig GetSysConfigByKey(string key);

        /// <summary>
        /// 异步根据配置键名获取系统配置对象
        /// （异步版本，适用于非阻塞场景，性能更优）
        /// </summary>
        /// <param name="key">配置键名（唯一标识某一配置项的键）</param>
        /// <returns>包含对应系统配置实体<see cref="SysConfig"/>的任务对象，若不存在则任务结果为null</returns>
        Task<SysConfig> GetSysConfigByKeyAsync(string key);

        /// <summary>
        /// 异步新增系统配置记录
        /// 负责将配置实体持久化到数据存储，并处理新增过程中的业务规则（如键名唯一性校验等）
        /// </summary>
        /// <param name="model">待新增的系统配置实体<see cref="SysConfig"/>，需包含配置名称、键、值等必要信息</param>
        /// <returns>任务对象，结果为新增成功的记录数（通常为1表示成功，0表示失败）</returns>
        Task<int> InsertSysConfigAsync(SysConfig model);
    }
}
